﻿namespace _5_数组;

internal class Program
{
    private static void Main(string[] args)
    {
        #region 1_数组获取元素

        //string[] str = new string[5] { "Jane", "Thomas", "Lucy", "David", "MissWang"};
        //Console.WriteLine(str[0]);
        //Console.WriteLine(str[1]);
        //Console.WriteLine(str[2]);
        //Console.WriteLine(str[3]);
        //Console.WriteLine(str[4]);
        //// 这个^就是异或运算
        //Console.WriteLine("****************");
        //// 会报错: Console.WriteLine(str[^0]); // 获取第一个元素
        //Console.WriteLine(str[^1]); // 获取最后一个元素
        //Console.WriteLine(str[^2]); // 获取倒数第二个元素

        #endregion

        #region 2_数组修改元素

        //int[] vals = new int[5] { 1, 2, 3, 4, 5 };
        //// 使用for循环可以改变数组, 但是使用foreach循环不能改变数组,这是因为foreach循环是只读的
        //// 对于对象列表而言, 上面的注释也是正确的,这时是可以改变对象的,因为对象是引用类型,而不是值类型
        //// 如下, 是可以的
        ////{
        ////    item.SomeProperty = newValue;
        ////}
        /////
        //for (int i = 0; i < vals.Length; i++)
        //{
        //    vals[i] *= vals[i];
        //    Console.WriteLine(vals[i]);
        //}

        #endregion

        #region 3_数组size

        //// 二维数组, 想要获取维度的话, 可以使用.Rank属性
        //int[,] twoVector = new int[,] { { 1, 2, 3 }, { 3, 2, 1 } };
        //int d1 = twoVector.GetLength(0);
        //int d2 = twoVector.GetLength(1);
        //for (int i = 0; i < d1; i++)
        //{
        //    for (int j = 0; j < d2; j++)
        //    {
        //        Console.WriteLine(twoVector[i, j]);
        //    }
        //}
        //Console.WriteLine(twoVector.Rank); // 2

        #endregion

        #region 4_锯齿状数组

        //int[][] jagged = new int[][]
        //{
        //    new int[] { 1, 2 },
        //    new int[] { 1, 2, 3 },
        //    new int[] { 1, 2, 3, 4 }
        //};

        //foreach (int[] array in jagged)
        //{
        //    foreach (int e in array)
        //    {
        //        Console.Write(e + " ");
        //    }
        //}

        //Console.Write('\n');

        #endregion

        #region 5_数组方法

        //int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        //Array.Sort(array); // 在原有数组上排序, 默认是升序
        //Array.Reverse(array); // 在原有数组上反转
        //Array.Resize(ref array, 20); // 在原有数组上扩容
        //Array.Clear(array, 0, 10); // 在原有数组上清空, 第一个参数为数组, 第二个为开始索引, 第三个为删除元素的个数
        //Array.Copy(array, 0, array, 10, 10); // 第一个为原数组, 第二个为目标数组, 第三个是长度, 第四个是复制的元素数
        //Array.IndexOf(array, 1); // 在原有数组上查找

        #endregion

        #region 6_

        #endregion
    }
}